#include <string.h>

char **nomesAgenda, **telefonesAgenda, **emailsAgenda;
int entradas;

void swap(char** array, int index1, int index2){
	char *aux = array[index1];
	array[index1] = array[index2];
	array[index2] = aux;
}

int partition(char** array, char** array2, char** array3, int left, int right){
	int i = left + 1;
	int j = right;
	char *pivo = array[left];
	while(i <= j){
		if(strcmp(array[i], pivo) < 0){
			i++;
		}
		else if(strcmp(array[j], pivo) > 0){
			j--;
		}
		//Segunda Hierarquia.
		else if(strcmp(array2[i], pivo) < 0){
			i++;
		}
		else if(strcmp(array2[j], pivo) > 0){
			j--;
		}
		//Terceira Hierarquia.
		else if(strcmp(array3[i], pivo) < 0){
			i++;
		}
		else if(strcmp(array3[j], pivo) > 0){
			j--;
		}
		//Caso seja totalmente igual.
		else if(strcmp(array[i], pivo) == 0){
			i++;
		}
		else{
			swap(nomesAgenda, i, j);
			swap(telefonesAgenda, i, j);
			swap(emailsAgenda, i, j);
		}
	}
	swap(nomesAgenda, left, j);
	swap(telefonesAgenda, left, j);
	swap(emailsAgenda, left, j);
	return j;
}

void quicksort(char** array, char** array2, char** array3, int left, int right) {
   if(left < right){
	   int m = partition(array, array2, array3, left, right);
	   quicksort(array, array2, array3, left, m - 1);
	   quicksort(array, array2, array3, m + 1, right);
   }
}


void preencherAgenda(char** nomes, char** telefones, char** emails, int numeroEntradas){
	nomesAgenda = nomes;
	telefonesAgenda = telefones;
	emailsAgenda = emails;
	entradas = numeroEntradas;
}

void ordenaPorNome(){
	quicksort(nomesAgenda, telefonesAgenda, emailsAgenda, 0, entradas - 1);
}

void ordenaPorTelefone(){
	quicksort(telefonesAgenda, nomesAgenda, emailsAgenda, 0, entradas - 1);
}

void ordenaPorEmail(){
	quicksort(emailsAgenda, nomesAgenda, telefonesAgenda, 0, entradas - 1);
}
